아파치 아브로
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
아파치 아브로는 데이터 직렬화 시스템으로, 데이터를 효율적으로 저장하고 교환하기 위한 파일 형식과 스키마 정의를 제공한다. 아브로 오브젝트 컨테이너 파일은 파일 헤더와 데이터 블록으로 구성되며, 파일 헤더는 스키마 정의, 메타데이터, 동기화 마커를 포함한다. 데이터 블록은 이진 또는 JSON 인코딩을 사용하여 직렬화된 데이터를 저장한다. 아브로 스키마는 JSON 형식으로 정의되며, 데이터의 구조와 타입을 명시하여 데이터 일관성을 보장한다. 아브로는 다양한 프로그래밍 언어를 지원하며, 파이썬을 포함한 여러 언어에서 API를 사용할 수 있다. 또한, 아브로 IDL이라는 인터페이스 정의 언어를 실험적으로 지원한다.
더 읽어볼만한 페이지
- 원격 프로시저 호출 - D-Bus
D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다. - 원격 프로시저 호출 - DCE/RPC
DCE/RPC는 분산 컴퓨팅 환경에서 원격 프로시저 호출을 가능하게 하는 프로토콜로, 오픈 소프트웨어 재단에서 개발되었으며, 다양한 운영체제와 환경에서 사용된다. - 데이터 직렬화 포맷 - XML
XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다. - 데이터 직렬화 포맷 - S-표현식
S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다. - 프로세스 간 통신 - Ajax
Ajax는 웹 페이지 전체를 새로고침하지 않고 비동기적으로 서버와 통신하여 웹 애플리케이션의 일부를 업데이트하는 웹 개발 기술로, XMLHttpRequest 객체의 등장으로 가능해졌으며 HTML, CSS, DOM, JavaScript, JSON 등의 기술을 통합하여 동적인 사용자 인터페이스를 구현한다. - 프로세스 간 통신 - D-Bus
D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
아파치 아브로 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
유형 | 원격 프로시저 호출 프레임워크 |
개발 | 아파치 소프트웨어 재단 |
배포일 | 2009년 11월 02일 |
최신 버전 | 1.11.3 |
최신 버전 배포일 | 2023년 9월 23일 |
저장소 | Avro 저장소 |
프로그래밍 언어 | 자바 C C++ C# 펄 파이썬 PHP 루비 |
라이선스 | 아파치 라이선스 2.0 |
웹사이트 | 아파치 아브로 웹사이트 |
2. 아브로 오브젝트 컨테이너 파일
아파치 아브로의 오브젝트 컨테이너 파일[5]은 파일 헤더와 하나 이상의 파일 데이터 블록으로 구성된다.[30]
파일 헤더는 다음과 같이 구성된다.
- 4바이트, 아스키 'O', 'b', 'j', 그 뒤에 버전 번호 1 (0x01)(이진 값 0x4F 0x62 0x6A 0x01)이 온다.
- 스키마 정의를 포함한 파일 메타데이터.
- 이 파일에 대한 16바이트의 무작위로 생성된 동기화 마커.
데이터 블록의 경우, 아브로는 이진 및 JSON의 두 가지 직렬화 인코딩을 지정한다:[6] 대부분의 애플리케이션은 더 작고 빠르기 때문에 이진 인코딩을 사용한다. 디버깅 및 웹 기반 애플리케이션의 경우 JSON 인코딩이 적합할 수 있다.
2. 1. 파일 헤더
아브로 오브젝트 컨테이너 파일[30]은 파일 헤더와 하나 이상의 파일 데이터 블록으로 구성된다.파일 헤더는 다음으로 구성된다.
- 4바이트: ASCII 'O', 'b', 'j', 그리고 1.
- 파일 메타데이터 (스키마 정의 포함).
- 16바이트: 파일을 위해 임의 생성된 동기화 마커.
데이터 블록의 경우 아브로는 2개의 직렬화 인코딩을 규정한다:[31] 바이너리, JSON. 대부분의 응용 프로그램들은 크기가 더 작고 더 빠르다는 이유로 이진 인코딩을 사용한다. 디버깅 및 웹 기반 애플리케이션의 경우 JSON 인코딩이 적절할 수 있다.
2. 2. 데이터 블록
아브로 오브젝트 컨테이너 파일[30]은 파일 헤더와 하나 이상의 파일 데이터 블록으로 구성된다. 파일 헤더는 4바이트(ASCII 'O', 'b', 'j', 1), 파일 메타데이터(스키마 정의 포함), 16바이트의 동기화 마커로 구성된다. 데이터 블록은 직렬화된 데이터를 포함하며, 아브로는 이진 인코딩과 JSON 인코딩을 지원한다.[31] 대부분의 애플리케이션은 크기가 작고 빠르다는 이유로 이진 인코딩을 사용하지만, 디버깅 및 웹 기반 애플리케이션의 경우 JSON 인코딩이 적절할 수 있다.3. 스키마 정의
아브로 스키마는 JSON 형식으로 정의된다.[32] 스키마는 데이터의 구조와 타입을 정의하여 데이터 직렬화 및 역직렬화 과정에서 데이터의 일관성을 보장한다. 스키마는 원시 자료형(null, boolean, int, long, float, double, bytes, string)과 복소수 자료형(record, enum, array, map, union, and fixed)으로 구성된다.[32][7]
간단한 스키마 예시는 다음과 같다.
```json
{
"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["null", "int"]},
{"name": "favorite_color", "type": ["null", "string"]}
]
}
3. 1. 자료형
아브로 스키마는 JSON을 사용하여 정의된다.[32] 스키마는 원시 자료형(null, boolean, int, long, float, double, bytes, string)과 복소수 자료형(record, enum, array, map, union, and fixed)으로 구성된다.[32]3. 2. 스키마 예제
아브로 스키마는 JSON을 사용하여 정의된다.[32] 스키마는 원시 자료형(null, boolean, int, long, float, double, bytes, string)과 복소수 자료형(record, enum, array, map, union, and fixed)으로 구성된다.사용자 정보를 나타내는 스키마 예제는 다음과 같다.
```json
{
"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
4. 직렬화와 역직렬화
아브로의 데이터는 상응하는 스키마와 함께 저장할 수 있으며, 즉 미리 스키마를 알지 않고도 직렬화된 항목을 읽을 수 있다.[8] 아브로의 데이터는 해당 스키마와 함께 저장될 수 있으며, 이는 직렬화된 항목을 사전에 스키마를 알지 못한 상태에서도 읽을 수 있음을 의미한다.
'''파이썬 코드 예제'''
```python
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
# 직렬화 예제
schema = avro.schema.parse(open("user.avsc", "rb").read()) # 쓰기 위한 스키마를 알아야 한다.[8]
writer = DataFileWriter(open("users.avro", "wb"), DatumWriter(), schema)
writer.append({"name": "Alyssa", "favorite_number": 256})
writer.append({"name": "Ben", "favorite_number": 8, "favorite_color": "red"})
writer.close()
# "users.avro" 파일은 JSON 형식의 스키마와 데이터의 간결한 바이너리 표현을 포함한다.[9]
# 역직렬화 예제
# 스키마는 데이터 파일에 포함되어 있다.
reader = DataFileReader(open("users.avro", "rb"), DatumReader())
for user in reader:
print(user)
reader.close()
```
출력 결과:
```text
{u'favorite_color': None, u'favorite_number': 256, u'name': u'Alyssa'}
{u'favorite_color': u'red', u'favorite_number': 8, u'name': u'Ben'}
4. 1. 파이썬 코드 예제
pythonimport avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
# 직렬화 예제
schema = avro.schema.parse(open("user.avsc", "rb").read()) # 쓰기 위한 스키마를 알아야 한다.[8]
writer = DataFileWriter(open("users.avro", "wb"), DatumWriter(), schema)
writer.append({"name": "Alyssa", "favorite_number": 256})
writer.append({"name": "Ben", "favorite_number": 8, "favorite_color": "red"})
writer.close()
# "users.avro" 파일은 JSON 형식의 스키마와 데이터의 간결한 바이너리 표현을 포함한다.[9]
# 역직렬화 예제
# 스키마는 데이터 파일에 포함되어 있다.
reader = DataFileReader(open("users.avro", "rb"), DatumReader())
for user in reader:
print(user)
reader.close()
```
출력 결과는 다음과 같다:
```text
{u'favorite_color': None, u'favorite_number': 256, u'name': u'Alyssa'}
{u'favorite_color': u'red', u'favorite_number': 8, u'name': u'Ben'}
5. API 지원 언어
이론적으로 모든 언어가 아파치 아브로를 사용할 수 있으나 다음의 언어가 API를 갖추고 있다:[35][36]
6. 아브로 IDL
아브로는 자료형 및 프로토콜 정의를 위해 JSON을 지원하는 것 외에도 아브로 IDL(Avro IDL)이라는 이름의 인터페이스 정의 언어(IDL) 문법을 실험적으로 지원한다.[41] 과거에는 GenAvro라는 이름이었던 이 포맷은 C/C++, 프로토콜 버퍼 등과 비슷한 문법을 갖춘 더 전통적인 IDL, 프로그래밍 언어에 친숙한 사용자들에 의해 쉽게 채용되도록 설계되어 있다.[24]
7. 로고
초기 아파치 아브로 로고는 영국의 항공기 제조업체 아브로(A.V. Roe and Company)의 로고를 사용했었다.[25] 2023년 말, 아브로 로고는 새로운 디자인으로 업데이트되었다.[26]
참조
[1]
웹사이트
Apache Avro: a New Format for Data Interchange
https://blog.clouder[...]
2019-03-10
[2]
웹사이트
Apache Avro Releases
https://avro.apache.[...]
2023-09-23
[3]
서적
Designing Data-Intensive Applications
O'Reilly
2017
[4]
웹사이트
3 Reasons Why In-Hadoop Analytics are a Big Deal - Dataconomy
http://dataconomy.co[...]
2016-04-21
[5]
웹사이트
Apache Avro Specification: Object Container Files
https://avro.apache.[...]
2024-09-08
[6]
웹사이트
Apache Avro Specification: Encodings
https://avro.apache.[...]
2024-09-08
[7]
웹사이트
Apache Avro Getting Started (Python)
https://avro.apache.[...]
2019-03-11
[8]
웹사이트
Apache Avro Getting Started (Python)
https://avro.apache.[...]
2019-03-11
[9]
웹사이트
Apache Avro Specification: Data Serialization
https://avro.apache.[...]
2024-09-08
[10]
웹사이트
GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop.
https://github.com/p[...]
2016-04-13
[11]
웹사이트
Supported Languages - Apache Avro - Apache Software Foundation
https://cwiki.apache[...]
2016-04-21
[12]
웹사이트
Avro: 1.5.1 - ASF JIRA
https://issues.apach[...]
2016-04-13
[13]
웹사이트
"[AVRO-533] .NET implementation of Avro - ASF JIRA"
https://issues.apach[...]
2016-04-13
[14]
웹사이트
Supported Languages
https://cwiki.apache[...]
2016-04-13
[15]
웹사이트
AvroEx
https://hexdocs.pm/a[...]
2017-10-18
[16]
웹사이트
Avrora — avrora v0.21.1
https://hexdocs.pm/a[...]
2021-06-11
[17]
웹사이트
avro package - github.com/hamba/avro - Go Packages
https://pkg.go.dev/g[...]
2023-07-04
[18]
간행물
goavro
https://github.com/l[...]
LinkedIn
2023-06-30
[19]
웹사이트
Native Haskell implementation of Avro
https://github.com/G[...]
Thomas M. DuBuisson, Galois, Inc.
2016-08-08
[20]
웹사이트
Pure JavaScript implementation of the Avro specification.
https://github.com/m[...]
2020-05-04
[21]
웹사이트
Getting Started (Python)
https://avro.apache.[...]
2023-07-04
[22]
간행물
avro: Avro is a serialization and RPC framework.
https://avro.apache.[...]
[23]
웹사이트
Apache Avro client library implementation in Rust
https://crates.io/cr[...]
2018-12-17
[24]
웹사이트
Apache Avro 1.8.2 IDL
http://avro.apache.o[...]
2019-03-11
[25]
웹사이트
The Avro Logo
http://avroheritagem[...]
2018-12-31
[26]
웹사이트
"[AVRO-3908] Update project logo everywhere - ASF JIRA"
https://issues.apach[...]
2024-02-06
[27]
웹인용
Apache Avro: a New Format for Data Interchange
https://blog.clouder[...]
2019-03-10
[28]
웹인용
Apache Avro Releases
https://avro.apache.[...]
2023-09-23
[29]
웹인용
3 Reasons Why In-Hadoop Analytics are a Big Deal - Dataconomy
http://dataconomy.co[...]
2016-04-21
[30]
웹인용
Apache Avro™ Specification: Object Container Files
https://avro.apache.[...]
2016-09-27
[31]
웹인용
Apache Avro™ Specification: Encodings
https://avro.apache.[...]
2016-09-27
[32]
웹인용
Apache Avro™ Getting Started (Python)
https://avro.apache.[...]
2016-06-16
[33]
웹인용
Apache Avro™ Getting Started (Python)
https://avro.apache.[...]
2016-06-16
[34]
웹인용
Apache Avro™ Specification: Data Serialization
https://avro.apache.[...]
2016-06-16
[35]
웹인용
GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop.
https://github.com/p[...]
2016-04-13
[36]
웹인용
Supported Languages - Apache Avro - Apache Software Foundation
https://cwiki.apache[...]
2016-04-21
[37]
웹인용
Avro: 1.5.1 - ASF JIRA
https://issues.apach[...]
2016-04-13
[38]
웹인용
"[AVRO-533] .NET implementation of Avro - ASF JIRA"
https://issues.apach[...]
2016-04-13
[39]
웹인용
Supported Languages
https://cwiki.apache[...]
2016-04-13
[40]
웹인용
Native Haskell implementation of Avro
https://github.com/G[...]
Thomas M. DuBuisson, Galois, Inc.
2016-08-08
[41]
웹인용
Apache Avro 1.8.0 IDL
http://avro.apache.o[...]
2016-04-13
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com